package com.jmu.edu.IMApplication.utils;

import android.content.Context;

import com.jmu.edu.IMApplication.MyApplication;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import cn.jpush.im.android.api.JMessageClient;
import cn.jpush.im.android.api.callback.GetBlacklistCallback;
import cn.jpush.im.android.api.callback.GetNoDisurbListCallback;
import cn.jpush.im.android.api.callback.GetUserInfoCallback;
import cn.jpush.im.android.api.callback.IntegerCallback;
import cn.jpush.im.android.api.model.UserInfo;
import cn.jpush.im.api.BasicCallback;

public class WillowUtils {

    public static void init(Context context) {
        JMessageClient.init(context);
    }

    public static void init(Context context, boolean msgRoaming) {
        JMessageClient.init(context, msgRoaming);
    }

    public static void registerEventReceiver(Object receiver) {
        JMessageClient.registerEventReceiver(receiver);
    }

    public static void unRegisterEventReceiver(Object receiver) {
        JMessageClient.unRegisterEventReceiver(receiver);
    }

    public static void setDebugMode(boolean isDeBug) {
        JMessageClient.setDebugMode(isDeBug);
    }

    /**
     * 获取当前账号用户信息
     *
     * @return
     */
    public static UserInfo getMyInfo() {
        return JMessageClient.getMyInfo();
    }

    /**
     * @return 获取nickname，如果nickname为空则返回username
     */
    public static String getMyNickName() {
        if (MyApplication.getUser().getNickname().isEmpty()) {
            return MyApplication.getUser().getUserName();
        } else {
            return MyApplication.getUser().getNickname();
        }
    }

    public static String getNickName(UserInfo userInfo) {
        String nickName = userInfo.getNickname();
        if (nickName.isEmpty()) {
            return userInfo.getUserName();
        } else {
            return userInfo.getNickname();
        }
    }

    public static String getSignature(UserInfo userInfo) {
        String signature = userInfo.getSignature();
        if (signature.isEmpty()) {
            return "Nothing";
        } else {
            //限制签名单行最多显示16个字符
            if (signature.length() > 16) {
                return signature.substring(0, 13).concat("...");
            } else {
                return signature;
            }
        }
    }

    public static String getCompleteSignature(UserInfo userInfo) {
        String signature = userInfo.getSignature();
        if (signature.isEmpty()) {
            return "Ta什么也没有留下~";
        } else {
            return signature;
        }
    }

    /**
     * 根据用户名获得用户信息
     *
     * @param username
     * @param getUserInfoCallback
     */
    public static void getUserInfo(String username, GetUserInfoCallback getUserInfoCallback) {
        JMessageClient.getUserInfo(username, "", getUserInfoCallback);
    }

    /**
     * 根据字段更新用户信息
     *
     * @param updateField 如下
     *                    nickname 昵称
     *                    birthday 生日
     *                    signature 签名
     *                    gender 性别
     *                    region 地区
     *                    address 地址
     *                    all 以上全部
     * @param info        更新过的用户实例
     * @param callback
     */
    public static void updateMyInfo(UserInfo.Field updateField, UserInfo info, BasicCallback callback) {
        JMessageClient.updateMyInfo(updateField, info, callback);
    }

    /**
     * 更新当前用户密码
     *
     * @param oldPassword
     * @param newPassword
     * @param updatePasswordCallBack
     */
    public static void updatePassword(String oldPassword, String newPassword, BasicCallback updatePasswordCallBack) {
        JMessageClient.updateUserPassword(oldPassword, newPassword, updatePasswordCallBack);
    }

    /**
     * 更新当前用户头像
     *
     * @param avatar
     * @param updateAvatarCallBack
     */
    public static void updateUserAvatar(File avatar, BasicCallback updateAvatarCallBack) {
        JMessageClient.updateUserAvatar(avatar, updateAvatarCallBack);
    }

    /**
     * 指定用户名添加到黑名单
     * 加入之后，我方依然能给对方发消息，但是对方给我发消息时会返回指定错误码，发送消息失败
     *
     * @param username
     * @param addToBlacklistCallBack
     */
    public static void addUserToBlacklist(String username, BasicCallback addToBlacklistCallBack) {
        List<String> usernames = new ArrayList<>();
        usernames.add(username);
        JMessageClient.addUsersToBlacklist(usernames, addToBlacklistCallBack);
    }

    /**
     * 根据用户名将用户移出黑名单
     *
     * @param username
     * @param delFromBlacklistCallBack
     */
    public static void delUserFromBlacklist(String username, BasicCallback delFromBlacklistCallBack) {
        List<String> usernames = new ArrayList<>();
        usernames.add(username);
        JMessageClient.delUsersFromBlacklist(usernames, delFromBlacklistCallBack);
    }

    /**
     * 获得黑名单中的用户列表
     *
     * @param getBlacklistCallback
     */
    public static void getBlacklist(GetBlacklistCallback getBlacklistCallback) {
        JMessageClient.getBlacklist(getBlacklistCallback);
    }

    /**
     * 设置通知展示类型
     *
     * @param flag 详见http://docs.jiguang.cn/jmessage/client/im_android_api_docs/constant-values.html#cn.jpush.im.android.api.JMessageClient.FLAG_NOTIFY_DISABLE
     */
    public static void setNotificationFlag(int flag) {
        JMessageClient.setNotificationFlag(flag);
    }

    /**
     * 获取通知栏展示信息
     *
     * @return int常量
     */
    public static int getNotificationFlag() {
        return JMessageClient.getNotificationFlag();
    }

    /**
     * 获取免打扰列表
     *
     * @param callback 可以将用户/群组添加到“免打扰”列表中，收到免打扰用户/群组发过来的消息时，sdk不会弹出默认的通知提示，但消息事件照常下发。
     */
    public static void getNoDisturblist(GetNoDisurbListCallback callback) {
        JMessageClient.getNoDisturblist(callback);
    }

    /**
     * 设置全局免打扰，收到所有消息将不会有通知栏效果
     *
     * @param noDisturbGlobal 1表示确认设置，其他表示取消设置
     * @param callback
     */
    public static void setNoDisturbGlobal(int noDisturbGlobal, BasicCallback callback) {
        JMessageClient.setNoDisturbGlobal(noDisturbGlobal, callback);
    }

    /**
     * 获取全局免打扰标识，1为免打扰，其他为非免打扰
     *
     * @param callback
     */
    public static void getNoDisturbGlobal(IntegerCallback callback) {
        JMessageClient.getNoDisturbGlobal(callback);
    }

}
